//引入axios
// import { def } from '@vue/shared'
import axios from 'axios'
import {ElMessageBox} from 'element-plus'
import router from '@/router'
import NProgress from 'nprogress'
//配置axios
let http = axios.create({
    //基础地址
    baseURL:'/api',
    //超时设置
    timeout:1000*10,
    //是否携带参数
    withCredentials:true
})

//配置拦截器
//请求拦截器，所有的axios请求都会被拦截器拦截，可以通过拦截器添加额外的配置
http.interceptors.request.use(config=>{
    //先获取token
    NProgress.start()
    let token = sessionStorage.getItem('myx-token')
    config.headers.authorization = token
    return config
})
//响应拦截器，所有的axios响应都会被响应拦截器拦截，可以对拦截的响应进行额外的配置

// console.dir(ElMessageBox)
http.interceptors.response.use(config=>{
    NProgress.done()
    //config 是每个请求响应的结果，所有的请求返回的结果都需要经过这条门，才能到组件那
    // console.log('config===',config)
    if(config.data.state){
         //响应正常
        return config
    }else{
        //不需要弹窗提示的路径
        let excludePaths = ['/sms/send','/order/query_order_status']
        // console.log(config)
        
        // 如果excludePaths中不包含当前的响应路径，那么不需要弹窗
        if(!excludePaths.includes(config.config.url)){
           //响应了错误
           ElMessageBox.alert(config.data.msg,'错误提示',{type:'error'})
        }

        //判断登入失效的情况  10022（登入状态过期） 1004（token失效了）前后端通俗约定的状态码  并不是http状态码
          if(config.data.code=='10022' || config.data.code=='1004'){
            //退到登录页，然后清除token
            sessionStorage.removeItem('myx-token')
            router.push('/login')
            //刷新页面。清掉缓存
            location.reload()
          }
          
        // return false
        return Promise.reject(config.data.msg)
    }
    
})

export default http;